<!DOCTYPE html>
<html>
  <head>
  <meta http-equiv="content-type" content="text/html; charset=utf-8">
  <meta content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" name="viewport">
  <meta name="description" content="刘清政">
  <meta name="keyword" content="hexo-theme">
  
    <link rel="shortcut icon" href="/css/images/logo.png">
  
  <title>
    
      Justin-刘清政的博客
    
  </title>
  <link href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
  <link href="//cdnjs.cloudflare.com/ajax/libs/nprogress/0.2.0/nprogress.min.css" rel="stylesheet">
  <link href="//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/styles/tomorrow.min.css" rel="stylesheet">
  
<link rel="stylesheet" href="/css/style.css">

  
    
<link rel="stylesheet" href="/css/plugins/gitment.css">

  
  <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
  <script src="//cdnjs.cloudflare.com/ajax/libs/geopattern/1.2.3/js/geopattern.min.js"></script>
  <script src="//cdnjs.cloudflare.com/ajax/libs/nprogress/0.2.0/nprogress.min.js"></script>
  
    
<script src="/js/qrious.js"></script>

  
  
    
<script src="/js/gitment.js"></script>

  
  

  
<meta name="generator" content="Hexo 4.2.0"></head>
<div class="wechat-share">
  <img src="/css/images/logo.png" />
</div>

  <body>
    <header class="header fixed-header">
  <div class="header-container">
    <a class="home-link" href="/">
      <div class="logo"></div>
      <span>Justin-刘清政的博客</span>
    </a>
    <ul class="right-list">
      
        <li class="list-item">
          
            <a href="/" class="item-link active">主页</a>
          
        </li>
      
        <li class="list-item">
          
            <a href="/tags/" class="item-link">标签</a>
          
        </li>
      
        <li class="list-item">
          
            <a href="/archives/" class="item-link">归档</a>
          
        </li>
      
        <li class="list-item">
          
            <a href="/about/" class="item-link">关于我</a>
          
        </li>
      
    </ul>
    <div class="menu">
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
      <span class="icon-bar"></span>
    </div>
    <div class="menu-mask">
      <ul class="menu-list">
        
          <li class="menu-item">
            
              <a href="/" class="menu-link mobile-active">主页</a>
            
          </li>
        
          <li class="menu-item">
            
              <a href="/tags/" class="menu-link">标签</a>
            
          </li>
        
          <li class="menu-item">
            
              <a href="/archives/" class="menu-link">归档</a>
            
          </li>
        
          <li class="menu-item">
            
              <a href="/about/" class="menu-link">关于我</a>
            
          </li>
        
      </ul>
    </div>
  </div>
</header>

    <main class="app-body">
  
    <article class="article-card">
      <h2 class="article-head">
        <a href="/python/MySQL%E5%85%A5%E9%97%A8/12-MySQL%E5%A4%9A%E8%A1%A8%E6%9F%A5%E8%AF%A2/">python/MySQL入门/12-MySQL多表查询</a>
      </h2>
      <p class="article-date">2020年10月22日</p>
      
      <div class="article-summary">
        
          一、准备建表与数据准备：
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 ...
        
      </div>
      <a class="more" href="/python/MySQL%E5%85%A5%E9%97%A8/12-MySQL%E5%A4%9A%E8%A1%A8%E6%9F%A5%E8%AF%A2/">详情...</a>
    </article>
  
    <article class="article-card">
      <h2 class="article-head">
        <a href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/10-%E5%9F%BA%E4%BA%8EUDP%E5%8D%8F%E8%AE%AE%E7%9A%84socket%E5%A5%97%E6%8E%A5%E5%AD%97%E7%BC%96%E7%A8%8B/">python/网络编程/10-基于UDP协议的socket套接字编程</a>
      </h2>
      <p class="article-date">2020年10月17日</p>
      
      <div class="article-summary">
        
          一、UDP套接字简单示例1.1 服务端1234567891011import socketserver = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)  # 数据报协议-》UDPserver.bind(('127.0.0.1', 8080 ...
        
      </div>
      <a class="more" href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/10-%E5%9F%BA%E4%BA%8EUDP%E5%8D%8F%E8%AE%AE%E7%9A%84socket%E5%A5%97%E6%8E%A5%E5%AD%97%E7%BC%96%E7%A8%8B/">详情...</a>
    </article>
  
    <article class="article-card">
      <h2 class="article-head">
        <a href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/4-TCP%E5%8D%8F%E8%AE%AE%E7%9A%84%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B%E5%92%8C%E5%9B%9B%E6%AC%A1%E6%8C%A5%E6%89%8B/">python/网络编程/4-TCP协议的三次握手和四次挥手</a>
      </h2>
      <p class="article-date">2020年10月17日</p>
      
      <div class="article-summary">
        
          一、背景描述通过OSI七层网络模型中IP层的介绍，我们知道网络层，可以实现两个主机之间的通信。但是这并不具体，因为，真正进行通信的实体是在主机中的进程，是一个主机中的一个进程与另外一个主机中的一个进程在交换数据。IP协议虽然能把数据报文送到目的主机，但是并没有交付给主机的具体应用进程。而端到 ...
        
      </div>
      <a class="more" href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/4-TCP%E5%8D%8F%E8%AE%AE%E7%9A%84%E4%B8%89%E6%AC%A1%E6%8F%A1%E6%89%8B%E5%92%8C%E5%9B%9B%E6%AC%A1%E6%8C%A5%E6%89%8B/">详情...</a>
    </article>
  
    <article class="article-card">
      <h2 class="article-head">
        <a href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/3-OSI%E4%B8%83%E5%B1%82%E5%8D%8F%E8%AE%AE/">python/网络编程/3-OSI七层协议</a>
      </h2>
      <p class="article-date">2020年10月17日</p>
      
      <div class="article-summary">
        
          互联网的本质就是一系列的网络协议，这个协议就叫OSI协议（一系列协议），按照功能不同，分工不同，人为的分层七层。实际上这个七层是不存在的。没有这七层的概念，只是人为的划分而已。区分出来的目的只是让你明白哪一层是干什么用的。
每一层都运行不同的协议。协议是干什么的，协议就是标准。
实际上还有人 ...
        
      </div>
      <a class="more" href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/3-OSI%E4%B8%83%E5%B1%82%E5%8D%8F%E8%AE%AE/">详情...</a>
    </article>
  
    <article class="article-card">
      <h2 class="article-head">
        <a href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/1-%E7%BD%91%E7%BB%9C%E6%9E%B6%E6%9E%84%E5%8F%8A%E5%85%B6%E6%BC%94%E5%8F%98%E8%BF%87%E7%A8%8B/">python/网络编程/1-网络架构及其演变过程</a>
      </h2>
      <p class="article-date">2020年10月17日</p>
      
      <div class="article-summary">
        
          一、单机架构应用领域：

植物大战僵尸
office

二、CS架构[
应用领域：

QQ
大型网络游戏

计算机发展初期用户去取数据，直接就去主机拿，从这里开始就分出了客户端和服务端。
客户端：用户安装的软件；
服务端：统一管理数据库的主机中的软件就叫做服务端，再后来服务端不只是管理数据， ...
        
      </div>
      <a class="more" href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/1-%E7%BD%91%E7%BB%9C%E6%9E%B6%E6%9E%84%E5%8F%8A%E5%85%B6%E6%BC%94%E5%8F%98%E8%BF%87%E7%A8%8B/">详情...</a>
    </article>
  
    <article class="article-card">
      <h2 class="article-head">
        <a href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/2-%E4%BA%92%E8%81%94%E7%BD%91%E5%92%8C%E4%BA%92%E8%81%94%E7%BD%91%E7%9A%84%E7%BB%84%E6%88%90/">python/网络编程/2-互联网和互联网的组成</a>
      </h2>
      <p class="article-date">2020年10月17日</p>
      
      <div class="article-summary">
        
          一、互联网的组成(教材版)[
互联网的拓扑结构非常复杂 ，并且在地理位置上覆盖了全球，从工作方式上看，可以划分为两大块：

边缘部分：这部分由所有连接在互联网上的主机组成。这部分是用户直接使用的，用来进行通信和资源共享。
核心部分：由大量网络和连接这些网络的路由器组成。这部分用来为边缘部分提 ...
        
      </div>
      <a class="more" href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/2-%E4%BA%92%E8%81%94%E7%BD%91%E5%92%8C%E4%BA%92%E8%81%94%E7%BD%91%E7%9A%84%E7%BB%84%E6%88%90/">详情...</a>
    </article>
  
    <article class="article-card">
      <h2 class="article-head">
        <a href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/7-%E6%A8%A1%E6%8B%9Fssh%E8%BF%9C%E7%A8%8B%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4/">python/网络编程/7-模拟ssh远程执行命令</a>
      </h2>
      <p class="article-date">2020年10月17日</p>
      
      <div class="article-summary">
        
          一、服务端123456789101112131415161718192021222324252627282930313233from socket import *import subprocessserver = socket(AF_INET, SOCK_STREAM)server.bin ...
        
      </div>
      <a class="more" href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/7-%E6%A8%A1%E6%8B%9Fssh%E8%BF%9C%E7%A8%8B%E6%89%A7%E8%A1%8C%E5%91%BD%E4%BB%A4/">详情...</a>
    </article>
  
    <article class="article-card">
      <h2 class="article-head">
        <a href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/9-%E8%A7%A3%E5%86%B3%E7%B2%98%E5%8C%85%E9%97%AE%E9%A2%98/">python/网络编程/9-解决粘包问题</a>
      </h2>
      <p class="article-date">2020年10月17日</p>
      
      <div class="article-summary">
        
          一、解决粘包问题(low版)问题的根源在于，接收端不知道发送端将要传送的字节流的长度，所以解决粘包的方法就是围绕，如何让发送端在发送数据前，把自己将要发送的字节流总大小让接收端知晓，然后接收端来一个死循环接收完所有数据。
1.1 服务端1234567891011121314151617181 ...
        
      </div>
      <a class="more" href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/9-%E8%A7%A3%E5%86%B3%E7%B2%98%E5%8C%85%E9%97%AE%E9%A2%98/">详情...</a>
    </article>
  
    <article class="article-card">
      <h2 class="article-head">
        <a href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/6-Socket%E6%8A%BD%E8%B1%A1%E5%B1%82/">python/网络编程/6-Socket抽象层</a>
      </h2>
      <p class="article-date">2020年10月17日</p>
      
      <div class="article-summary">
        
          一、Socket抽象层我们知道两个进程如果需要进行通讯最基本的一个前提是能够唯一标示一个进程，在本地进程通讯中我们可以使用PID来唯一标示一个进程，但PID只在本地唯一，网络中的两个进程PID冲突几率很大，这时候我们需要另辟它径了，我们知道IP层的IP地址可以唯一标示主机，而TCP层协议和端 ...
        
      </div>
      <a class="more" href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/6-Socket%E6%8A%BD%E8%B1%A1%E5%B1%82/">详情...</a>
    </article>
  
    <article class="article-card">
      <h2 class="article-head">
        <a href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/11-%E5%9F%BA%E4%BA%8Esocketserver%E5%AE%9E%E7%8E%B0%E5%B9%B6%E5%8F%91%E7%9A%84socket%E5%A5%97%E6%8E%A5%E5%AD%97%E7%BC%96%E7%A8%8B/">python/网络编程/11-基于socketserver实现并发的socket套接字编程</a>
      </h2>
      <p class="article-date">2020年10月17日</p>
      
      <div class="article-summary">
        
          一、基于TCP协议基于tcp的套接字，关键就是两个循环，一个链接循环，一个通信循环
socketserver模块中分两大类：server类（解决链接问题）和request类（解决通信问题）
1.1 server类[
1.2 request类[
1.3 继承关系


1.4 服务端123456 ...
        
      </div>
      <a class="more" href="/python/%E7%BD%91%E7%BB%9C%E7%BC%96%E7%A8%8B/11-%E5%9F%BA%E4%BA%8Esocketserver%E5%AE%9E%E7%8E%B0%E5%B9%B6%E5%8F%91%E7%9A%84socket%E5%A5%97%E6%8E%A5%E5%AD%97%E7%BC%96%E7%A8%8B/">详情...</a>
    </article>
  

  
    <div class="guide-pager">
  
    <a href="/page/12/"><span class="page-arrow">← </span>Prev</a>
  
  
    <a href="/page/14/">Next<span class="page-arrow"> →</span></a>
  
</div>
  
</main>


    <div class="scroll-top">
  <span class="arrow-icon"></span>
</div>
    <footer class="app-footer">
<!-- 不蒜子统计 -->
<span id="busuanzi_container_site_pv">
     本站总访问量<span id="busuanzi_value_site_pv"></span>次
</span>
<span class="post-meta-divider">|</span>
<span id="busuanzi_container_site_uv" style='display:none'>
     本站访客数<span id="busuanzi_value_site_uv"></span>人
</span>
<script async src="//busuanzi.ibruce.info/busuanzi/2.3/busuanzi.pure.mini.js"></script>



  <p class="copyright">
    &copy; 2021 | Proudly powered by <a href="https://www.cnblogs.com/xiaoyuanqujing" target="_blank">小猿取经</a>
    <br>
    Theme by <a href="https://www.cnblogs.com/xiaoyuanqujing" target="_blank" rel="noopener">小猿取经</a>
  </p>
</footer>

<script>
  function async(u, c) {
    var d = document, t = 'script',
      o = d.createElement(t),
      s = d.getElementsByTagName(t)[0];
    o.src = u;
    if (c) { o.addEventListener('load', function (e) { c(null, e); }, false); }
    s.parentNode.insertBefore(o, s);
  }
</script>
<script>
  async("//cdnjs.cloudflare.com/ajax/libs/fastclick/1.0.6/fastclick.min.js", function(){
    FastClick.attach(document.body);
  })
</script>

<script>
  var hasLine = 'true';
  async("//cdnjs.cloudflare.com/ajax/libs/highlight.js/9.12.0/highlight.min.js", function(){
    $('figure pre').each(function(i, block) {
      var figure = $(this).parents('figure');
      if (hasLine === 'false') {
        figure.find('.gutter').hide();
      }
      var lang = figure.attr('class').split(' ')[1] || 'code';
      var codeHtml = $(this).html();
      var codeTag = document.createElement('code');
      codeTag.className = lang;
      codeTag.innerHTML = codeHtml;
      $(this).attr('class', '').empty().html(codeTag);
      figure.attr('data-lang', lang.toUpperCase());
      hljs.highlightBlock(block);
    });
  })
</script>





<!-- Baidu Tongji -->

<script>
    var _baId = 'c5fd96eee1193585be191f318c3fa725';
    // Originial
    var _hmt = _hmt || [];
    (function() {
      var hm = document.createElement("script");
      hm.src = "//hm.baidu.com/hm.js?" + _baId;
      var s = document.getElementsByTagName("script")[0];
      s.parentNode.insertBefore(hm, s);
    })();
</script>


<script src="/js/script.js"></script>


<script src="/js/search.js"></script>


<script src="/js/load.js"></script>



  <span class="local-search local-search-google local-search-plugin" style="right: 50px;top: 70px;;position:absolute;z-index:2;">
      <input type="search" placeholder="站内搜索" id="local-search-input" class="local-search-input-cls" style="">
      <div id="local-search-result" class="local-search-result-cls"></div>
  </span>


  </body>
</html>